package com.personal.test.common.utils;


/**
 * @author linyh
 * @version 1.0
 * @email 1503386669@qq.com
 * @date 2020/12/7 11:11
 * 排序工具类
 */
public class PaixuUtils {

    /**
     * 数组交换，a下标和b下标交换
     *
     * @param arraay
     * @param a
     * @param b
     */
    public static void swap(int[] arraay, int a, int b) {
        int temp = arraay[a];
        arraay[a] = arraay[b];
        arraay[b] = temp;
    }


    /**
     * 选择排序算法（第一次循环遍历找出最小或最大元素，再交换;第二次循环遍历找出次大元素或次小元素，再交换，以此类推）
     */
    public static void selectSort(int[] array) {
        int len = array.length;
        for (int i = 0; i < len - 1; i++) {
            int min = i;
            for (int j = i + 1; j < len; j++) {
                if (array[j] < array[min]) {
                    min = j;
                }
            }
            if (min != i) {
                swap(array, i, min);
            }
        }
    }


    /**
     * 冒泡排序算法
     *
     * @param array
     */
    public static void bubbleSort(int[] array) {
        int i, j, temp;
        int len = array.length;
        for (j = 0; j < len - 1; j++) {
            for (i = 0; i < len - 1 - j; i++) {
                if (array[i] > array[i + 1]) {
                    temp = array[i];
                    array[i] = array[i + 1];
                    array[i + 1] = temp;
                }
            }
        }
    }

    /**
     * 插入排序算法
     *
     * @param array
     */
    public static void insertSort(int[] array) {
        int len = array.length;
        for (int i = 1; i < len; i++) {
            int j = i;
            while (j > 0) {
                if (array[j] < array[j - 1]) {
                    int temp;
                    temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
                    j--;
                } else {
                    break;
                }
            }
        }
    }

}
